﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Negocio.Interface;
using Metadados;
using Dados;

namespace Negocio
{
    public class NGFornecedor
    {
        private ITCadastroFornecedor telaCadastro;

        bool forJuridico { get; set; }
        string forCpfCnpj { get; set; }
        string forNome { get; set; }
        string forInscricaoEstadual { get; set; }
        string forLogradouro { get; set; }
        string forNumero { get; set; }
        string forComplemento { get; set; }
        string forBairro { get; set; }
        string forCidade { get; set; }
        string forEstado { get; set; }
        string forFone { get; set; }
        string forEmail { get; set; }
        string forVendedor { get; set; }
        string forFoneVendedor { get; set; }
        string mensagem { get; set; }


        public NGFornecedor(ITCadastroFornecedor telaCadastroFornecedor)
        {
            telaCadastro = telaCadastroFornecedor;
        }

        #region Pegar e Colocar dados na Tela

        private Fornecedor pegarDados()
        {
            return new Fornecedor
            {
                forJuridico = telaCadastro.forJuridico,
                forCpfCnpj = telaCadastro.forCpfCnpj,
                forNome = telaCadastro.forNome,
                forInscricaoEstadual = telaCadastro.forInscricaoEstadual,
                forLogradouro = telaCadastro.forLogradouro,
                forNumero = telaCadastro.forNumero,
                forComplemento = telaCadastro.forComplemento,
                forBairro = telaCadastro.forBairro,
                forCidade = telaCadastro.forCidade,
                forEstado = telaCadastro.forEstado,
                forFone = telaCadastro.forFone,
                forEmail = telaCadastro.forEmail,
                forVendedor = telaCadastro.forVendedor,
                forFoneVendedor = telaCadastro.forFoneVendedor
            };
        }

        private void colocarDados(Fornecedor obj)
        {
            telaCadastro.forJuridico = obj.forJuridico;
            telaCadastro.forCpfCnpj = obj.forCpfCnpj;
            telaCadastro.forNome = obj.forNome;
            telaCadastro.forInscricaoEstadual = obj.forInscricaoEstadual;
            telaCadastro.forLogradouro = obj.forLogradouro;
            telaCadastro.forNumero = obj.forNumero;
            telaCadastro.forComplemento = obj.forComplemento;
            telaCadastro.forBairro = obj.forBairro;
            telaCadastro.forCidade = obj.forCidade;
            telaCadastro.forEstado = obj.forEstado;
            telaCadastro.forFone = obj.forFone;
            telaCadastro.forEmail = obj.forEmail;
            telaCadastro.forVendedor = obj.forVendedor;
            telaCadastro.forFoneVendedor = obj.forFoneVendedor;
        }
        #endregion

        #region Manipulação

        public void gravar()
        {

            #region Validações
            if (telaCadastro.forCpfCnpj == string.Empty)
            {
                telaCadastro.mensagem = " O campo CPF/CNPJ é obrigatorio! ";
                return;
            }

            /* if (telaCadastro.proDescricao == string.Empty)
             {
                 telaCadastro.mensagem = " O campo descrição é obrigatorio! ";
                 return;
             }

             if (telaCadastro.proCodigoBarra == string.Empty)
             {
                 telaCadastro.mensagem = " O campo código de barras é obrigatorio! ";
                 return;
             }

             if (telaCadastro.proNcm == string.Empty)
             {
                 telaCadastro.mensagem = " O campo NCM é obrigatorio! ";
                 return;
             }
             */
            # endregion

            DBFornecedor objDados = new DBFornecedor();

            Fornecedor objFornecedor = new Fornecedor();

            objFornecedor = pegarDados();

            if (!consultar(objFornecedor.forCpfCnpj))
            {
                if (objDados.incluir(objFornecedor))
                {
                    telaCadastro.mensagem = "Fornecedor cadastrado com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro no cadastro de Fornecedor!";
                }
            }
            else
            {
                if (objDados.atualizar(objFornecedor))
                {
                    colocarDados(objFornecedor);
                    telaCadastro.mensagem = "Fornecedor alterado com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro ao alterar o Fornecedor!";
                }
            }
        }

        public void deletar(string p_forCpfCnpj)
        {
            DBFornecedor objDados = new DBFornecedor();

            if (objDados.excluir(p_forCpfCnpj))
            {
                telaCadastro.mensagem = "Fornecedor excluido com sucesso!";
            }
            else
            {
                telaCadastro.mensagem = "Fornecedor não pode ser excluido!";
            }

            limpaTela();
        }

        public void limpaTela()
        {
            telaCadastro.forJuridico = true;
            telaCadastro.forCpfCnpj = string.Empty;
            telaCadastro.forNome = string.Empty;
            telaCadastro.forInscricaoEstadual = string.Empty;
            telaCadastro.forLogradouro = string.Empty;
            telaCadastro.forNumero = string.Empty;
            telaCadastro.forComplemento = string.Empty;
            telaCadastro.forBairro = string.Empty;
            telaCadastro.forCidade = string.Empty;
            telaCadastro.forEstado = string.Empty;
            telaCadastro.forFone = string.Empty;
            telaCadastro.forEmail = string.Empty;
            telaCadastro.forVendedor = string.Empty;
            telaCadastro.forFoneVendedor = string.Empty;
        }

        public bool consultar(string p_forCpfCnpj)
        {
            DBFornecedor objDados = new DBFornecedor();

            try
            {
                colocarDados(objDados.consultar(p_forCpfCnpj)[0]);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        public bool validaCPF(string strCPF)
        {
            string valor = strCPF.Replace(".", "");

            valor = valor.Replace("-", "");



            if (valor.Length != 11)

                return false;



            bool igual = true;

            for (int i = 1; i < 11 && igual; i++)

                if (valor[i] != valor[0])

                    igual = false;



            if (igual || valor == "12345678909")

                return false;



            int[] numeros = new int[11];



            for (int i = 0; i < 11; i++)

                numeros[i] = int.Parse(

                  valor[i].ToString());



            int soma = 0;

            for (int i = 0; i < 9; i++)

                soma += (10 - i) * numeros[i];



            int resultado = soma % 11;



            if (resultado == 1 || resultado == 0)
            {

                if (numeros[9] != 0)

                    return false;

            }

            else if (numeros[9] != 11 - resultado)

                return false;



            soma = 0;

            for (int i = 0; i < 10; i++)

                soma += (11 - i) * numeros[i];



            resultado = soma % 11;



            if (resultado == 1 || resultado == 0)
            {

                if (numeros[10] != 0)

                    return false;

            }

            else

                if (numeros[10] != 11 - resultado)

                    return false;



            return true;

        }

        public bool validaCNPJ(string strCNPJ)
        {

            int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };

            int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };

            int soma;

            int resto;

            string digito;

            string tempCnpj;

            strCNPJ = strCNPJ.Trim();

            strCNPJ = strCNPJ.Replace(".", "").Replace("-", "").Replace("/", "");

            if (strCNPJ.Length != 14)

                return false;

            tempCnpj = strCNPJ.Substring(0, 12);

            soma = 0;

            for (int i = 0; i < 12; i++)

                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];

            resto = (soma % 11);

            if (resto < 2)

                resto = 0;

            else

                resto = 11 - resto;

            digito = resto.ToString();

            tempCnpj = tempCnpj + digito;

            soma = 0;

            for (int i = 0; i < 13; i++)

                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];

            resto = (soma % 11);

            if (resto < 2)

                resto = 0;

            else

                resto = 11 - resto;

            digito = digito + resto.ToString();

            return strCNPJ.EndsWith(digito);
        }

        #endregion
    }
}